package com.rainbow.support.half.message.handler.consumer;

import com.rainbow.support.half.message.entity.HalfMessagePayload;
import org.springframework.lang.NonNull;

/**
 * rocketMq半事务消费者
 * 通用逻辑块统一处理类
 * 业务消费者,仅需要继承此方法,其他通用方法都已经隐藏掉,让业务更专注
 * 客户仅需要关注自己的本地业务和数据处理前的数据组装,解决大事务的问题
 * @author 傅为地
 */
public abstract class AbstractConsumerHandler extends BridgingConsumerHandler {

    /**
     * TODO 消费者本地业务处理方法
     * 不同的消费者本地事务处理逻辑,
     * 具体处理自己本地事务逻辑
     * 本地业务处理时,消费人和消费时间最好
     * 采用消息体内的发送人和发送时间一致
     * @param msg 消息主体
     * @return 消费者本地业务处理结果
     */
    public abstract boolean consumerProcess(@NonNull HalfMessagePayload msg);


    /**
     *  消费者业务处理前准备参数,需要业务自己实现,不强制
     * 本地业务逻辑处理之前,需要查询好需要处理的参数信息
     * 本地事务处理时,直接处理业务逻辑,解决大事务的问题
     * @param producer 生产者参数
     */
    public void prepareParams(@NonNull HalfMessagePayload producer){};



}
